require 'TCPEventHandler'
require 'audience_ui'

local _G, print, tonumber, TCPEventHandler, audience_ui
    = _G, print, tonumber, TCPEventHandler, audience_ui


module 'audience'

-- ao receber dados, notifica a nova audiência
function on_receive(self, data)
    audience_ui.set_users(data) -- interface
    if self.handler.new_audience then
        self.handler:new_audience(tonumber(data))
    end
end

-- ao desconectar, tenta conectar novamente
function on_disconnect(self)
    audience_ui.set_status('no') -- interface
    self.connection:connect()
end

-- se ocorrer erros de comunicação, tenta nova conexão
function on_error(self, error)
    self.connection:connect()
end

-- ao conectar
function on_connect(self)
    audience_ui.set_status('ok') -- interface
    self.connection:send("ACK\n") -- envia uma confirmação de conexão
end

-- Abstrai a conexão com o sensor de de audiência, permitindo tratar a chegada de nova audiência.
function AudienceSensor(host, port, handler)
    -- cria uma conexão
    connection = TCPEventHandler.Connection(host, port, {handler = handler, on_receive=on_receive, on_disconnect = on_disconnect, on_error = on_error, on_connect=on_connect})
    connection:connect()
    return connection
end

